#include "stm32f10x.h"                  // Device header

#include "sys.h"
#include "LED.h"
#include "OLED.h"

#include "Serial.h"
#include "FtpServer.h"
#include "AtCmd.h"

uint8_t FTP_State_Now = 0;					// FTP 状态
uint8_t At_Cmd_State_Now = 0;				// AT 指令状态
uint8_t At_Res_State_Now = 0;				// AT 指令响应状态
char FTP_Data[100] = {"HELLO WORLD"};		// 数据缓存


// FTP 名称状态映射表（对应FTP状态机枚举）
char FTP_State[6][8] = {
	"IDLE",		// 空闲状态
	"START",	// 开始连接状态
	"LOGIN",	// 登录状态
	"RUN",		// 运行状态
	"LOGOUT",	// 登出状态
	"STOP"		// 停止状态
};

// AT 指令状态映射表（对应AT_Command_State枚举）
char At_Cmd_State[6][8] = {
	"IDLE",		// 空闲状态
	"START",	// 开始处理指令
	"SEND",		// 发送AT指令
	"WAIT",		// 等待模块响应
	"PROC",		// 数据处理
	"END"		// 指令结束
};

// AT 指令响应状态映射表（对应Response_State枚举）
char At_Res_State[6][8] = {
	"IDLE",		// 空闲状态
	"SUCCESS",	// 成功响应
	"ERROR",	// 错误响应
	"TIMEOUT",	// 超时响应
	"NULL",		// 无响应
	"END"		// 响应结束
};

// 主循环运行1次的时间
uint32_t* GetRunTime(void)
{
	static uint32_t run_time = 0;
	static uint32_t last_run_time = 0;
	
	run_time = GetSystemTick() - last_run_time;	// 计算运行时间
	last_run_time = GetSystemTick();// 记录当前时间
	
	return &run_time;
}


int main(void)
{
	uint32_t last_time = 0;
	uint16_t time_count = 0;
	
	
	SystemInit();       // 初始化系统时钟（一般在启动文件中已调用）
    SysTick_Init();     // 初始化1ms SysTick中断

	LED_Init();			// LED初始化
	LED_ON();			// 点亮板载LED

	OLED_Init();        // OLED初始化
	OLED_Clear();       // 清屏显示
//	OLED_ShowString(1, 1, "Ftp_S:"); // STP状态显示
//	OLED_ShowString(2, 1, "Cmd_S:"); // 命令状态显示
//	OLED_ShowString(3, 1, "Res_S:"); // 结果状态显示
//	OLED_ShowString(4, 1, "Data:");  // 数据显示

//	OLED_ShowString(1, 7, FTP_State[FTP_State_Now]); // 显示FTP状态
//	OLED_ShowString(2, 7, At_Cmd_State[At_Cmd_State_Now]);  // 显示AT指令状态
//	OLED_ShowString(3, 7, At_Res_State[At_Res_State_Now]);   // 显示响应状态
//	OLED_ShowString(4, 6, FTP_Data);  // 数据

	OLED_ShowString(1, 1, "Tx:"); // STP状态显示

	OLED_ShowString(3, 1, "Rx:"); // STP状态显示


	Serial_Init();		// 串口初始化
//	At_Command_Init();	// AT指令初始化
//	Ftp_Server_Init();	// FTP服务器初始化
	
	
		
	while (1)
	{
		OLED_ShowNum(1, 15, *GetRunTime(), 2);// 显示运行时间
		
		if (GetSystemTick() - last_time >= 1000)  // 判断是否到了1秒
        {
            last_time = GetSystemTick();
            // 这里执行1秒执行一次的代码，比如 LED 翻转等
			LED_Turn();
			
//			printf("Run Time:%d\tIdle:%d\tRx_Len:%d\r\n", ++time_count, Serial_Is_Idle(), Serial_Rx_Length);
			Serial_SendString("AT\r\n");
			// At_Command_Init();
//            At_Command_Applictaion("AT", "", AT_CMD_RESPONSE_OK, 1000, 1000);
		}

		// 闲时回发
		if (Serial_Is_Idle()) {
//			Serial_SendArray(Serial_Rx_Buffer, Serial_Rx_Length);	// 发送接收缓冲区数据
			Serial_Rx_Buffer[Serial_Rx_Length] = '\0';
			OLED_ShowNum(3, 4, Serial_Rx_Length, 3);
//			OLED_ShowString(4, 1, Serial_Rx_Buffer + (Serial_Rx_Length - 6));
			OLED_ShowString(4, 1, Serial_Rx_Buffer);
			Serial_Rx_Length = 0;
		}

//		Ftp_Server_Process();	// FTP服务器处理
//		At_Command_Process();	// AT指令处理
	}
}
